package com.ruoyi.common.utils.biz;

import com.ruoyi.common.config.props.AllPathProperties;
import com.ruoyi.common.config.props.ModuleDirProperties;
import org.springframework.stereotype.Component;

/**
 * @Description 路径这一块的工具类
 * @Author liuhl
 * @Date 2024/4/23
 **/
@Component
public class PathUtil {

    private static AllPathProperties allPath = new AllPathProperties();

    public PathUtil(AllPathProperties allPathProperties){
        PathUtil.allPath = allPathProperties;
    }

    public static AllPathProperties allPath(){
        return PathUtil.allPath;
    }

    public static ModuleDirProperties moduleDirs(){
        return PathUtil.allPath.getModuleDir();
    }

    public static String baseDir(){
        return PathUtil.allPath.getRootPath().getBase();  // /dgdq
    }

    public static String tmpDir(){
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp(); // /dgdq/tmp
    }

    public static String outputDir(){
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathOutput(); // /dgdq/output
    }

    public static String codeDir(){
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathCode(); // /dgdq/code/dgdq-algorithm
    }

    public static String configDir(){
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathConfig();  // /dgdq/config
    }

    public static String commonIniPath(){
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathConfig() + "/common.ini";  // /dgdq/config/common.ini
    }

    public static String outputModuleDir(BizModule module){
        String dir = "";
        switch (module) {
            case MODEL_ASSESS:
                dir = PathUtil.moduleDirs().getModelAssess().get("dir");
                break;
            case MODEL_CORRECT:
                dir = PathUtil.moduleDirs().getModelCorrect().get("dir");
                break;
            case MODEL_BUILD:
                dir = PathUtil.moduleDirs().getModelBuild().get("dir");
                break;
            case MODEL_CAL:
                dir = PathUtil.moduleDirs().getModelCal().get("dir");
                break;
            case MODEL_REVISE:
                dir = PathUtil.moduleDirs().getModelRevise().get("dir");
                break;
            case DATA_FUSION:
                dir = PathUtil.moduleDirs().getDataFusion().get("dir");
                break;
            case DENSITY_INVERT:
                dir = PathUtil.moduleDirs().getDensityInvert().get("dir");
                break;
            case COLLECT:
                dir = PathUtil.moduleDirs().getCollect().get("dir");
                break;
            case TASK_ASSESS:
                dir = PathUtil.moduleDirs().getTaskAssess().get("dir");
                break;
            case TRACK_APPLY:
                dir = PathUtil.moduleDirs().getTrackApply().get("dir");
                break;
            case MODEL_HIGH_PRECISION:
                dir = PathUtil.moduleDirs().getHighPrecision().get("dir");
                break;
        }
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathOutput() + dir; // /dgdq/output/modelCorrect
    }

    public static String tmpModuleDir(BizModule module){
        String dir = "";
        switch (module) {
            case MODEL_ASSESS:
                dir = PathUtil.moduleDirs().getModelAssess().get("dir");
                break;
            case MODEL_CORRECT:
                dir = PathUtil.moduleDirs().getModelCorrect().get("dir");
                break;
            case MODEL_BUILD:
                dir = PathUtil.moduleDirs().getModelBuild().get("dir");
                break;
            case MODEL_CAL:
                dir = PathUtil.moduleDirs().getModelCal().get("dir");
                break;
            case MODEL_REVISE:
                dir = PathUtil.moduleDirs().getModelRevise().get("dir");
                break;
            case DATA_FUSION:
                dir = PathUtil.moduleDirs().getDataFusion().get("dir");
                break;
            case DENSITY_INVERT:
                dir = PathUtil.moduleDirs().getDensityInvert().get("dir");
                break;
            case COLLECT:
                dir = PathUtil.moduleDirs().getCollect().get("dir");
                break;
            case TASK_ASSESS:
                dir = PathUtil.moduleDirs().getTaskAssess().get("dir");
                break;
            case TRACK_APPLY:
                dir = PathUtil.moduleDirs().getTrackApply().get("dir");
                break;
            case MODEL_HIGH_PRECISION:
                dir = PathUtil.moduleDirs().getHighPrecision().get("dir");
                break;

            //    COLLECT,            //数据收集
            //    DATA_FUSION,        //数据融合
            //    DENSITY_INVERT,     //大气密度反演
            //    MODEL_ASSESS,       //模型检验评估
            //    MODEL_BUILD,        //大气模型构建
            //    MODEL_CAL,          //多模型计算
            //    MODEL_CORRECT,      //模型动态修正
            //    MODEL_REVISE,       //风场模型修订
            //    TASK_ASSESS,        //典型任务评估
            //    TRACK_APPLY         //典型轨道应用

        }
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathTmp() + dir; // /dgdq/tmp/collect
    }

    public static String codeModuleDir(BizModule module){
        String dir = "";
        switch (module) {
            case MODEL_ASSESS:
                dir = PathUtil.moduleDirs().getModelAssess().get("dir");
                break;
            case MODEL_CORRECT:
                dir = PathUtil.moduleDirs().getModelCorrect().get("dir");
                break;
            case MODEL_BUILD:
                dir = PathUtil.moduleDirs().getModelBuild().get("dir");
                break;
            case MODEL_CAL:
                dir = PathUtil.moduleDirs().getModelCal().get("dir");
                break;
            case MODEL_REVISE:
                dir = PathUtil.moduleDirs().getModelRevise().get("dir");
                break;
            case DATA_FUSION:
                dir = PathUtil.moduleDirs().getDataFusion().get("dir");
                break;
            case DENSITY_INVERT:
                dir = PathUtil.moduleDirs().getDensityInvert().get("dir");
                break;
            case COLLECT:
                dir = PathUtil.moduleDirs().getCollect().get("dir");
                break;
            case TASK_ASSESS:
                dir = PathUtil.moduleDirs().getTaskAssess().get("dir");
                break;
            case TRACK_APPLY:
                dir = PathUtil.moduleDirs().getTrackApply().get("dir");
                break;
            case MODEL_HIGH_PRECISION:
                dir = PathUtil.moduleDirs().getHighPrecision().get("dir");
                break;
        }
        return allPath.getRootPath().getBase() + allPath.getRootPath().getPathCode() + dir; // /dgdq/code/dgdq-algorithm/modelCorrect
    }
}
